<?php
// fonction mime_content_type, si elle n'existe pas
if (!function_exists("mime_content_type")) {
	function mime_content_type ($filename) {
		$filename = escapeshellarg($filename);
		$out = `file -iL $filename 2>/dev/null`;
		if (empty($out)) {
			return 'application/octet-stream';
		}
		// Strip off filename
		$t = substr($out, strpos($out, ':') + 2);
		if (strpos($t, ';') !== false) {
			// Strip MIME parameters
			$t = substr($t, 0, strpos($t, ';'));
		}
		// Strip any remaining whitespace
		return trim($t);
	}
}


define('ERR_INPUT_FILE_OK', 0);
define('ERR_INPUT_FILE_SIZE', 1);
define('ERR_INPUT_FILE_TYPE', 2);
define('ERR_INPUT_FILE_EXIST', 3);
/*
 * verifie la validité d'un fichier suivant sa taille et son type
 * @param	file	chemin du fichier
 * @param 	size	taille maximale
 * @param	types	tableau des types mime autorisé (application/pdf, image/, etc)
 */
function wrong_uploaded_file($file, $size=0, $types=Array()){
	// Checking if file exists
	if ( !is_file($file) )
		return ERR_INPUT_FILE_EXIST;
	// Checking file size
	if ( $size )
		if ( filesize($file)>$size )
			return ERR_INPUT_FILE_SIZE;
	if ( count($types)>0 ){
		// Checking file type
		if ( $types ){
			$type_file = mime_content_type($file);
			if ( is_array($types) ){
				$type_ok = FALSE;
				foreach ( $types as $type )
					if ( strpos($type_file, $type) ){
						$type_ok = TRUE;
						break;
					}
			}
			else{
				$type_ok = strpos($type_file, $types);
			}
			if ( !$type_ok )
				return ERR_INPUT_FILE_TYPE;
		}
	}
	else {
		$pi = pathinfo($file);
		if (strpos('php',$pi['extension'])!== false)
			return ERR_INPUT_FILE_TYPE;
	}
	// Everything is ok
	return ERR_INPUT_FILE_OK;
}


/*
 * convertit un pdf ou une image en 1 ou plusieurs jpg et renvoie le nouveau nom
 * du fichier (les convertis sont nommé <nom>[-<page>-]mail.jpg
 * @param	doc_path	le chemin du fichier a convertir
 * @param	dir_dest	le repertoire de destination
 * @param	dir_dest	le nom d'origine du fichier
 * @return	le nom unique du fichier enregistré, ou '' en cas de probleme
 */
//!!!TODO: renommer le fichier APRES la conversion
function doc2jpgs($doc_path, $dir_dest='upload/', $doc_name=''){
	$convert_options = '-resize 600x600 -density 250 -quality 85';
	// Obtention d'un nom de fichier unique
	$fichier = basename(tempnam($dir_dest,''));
	unlink($dir_dest.$fichier);
	// Verification de l'existence du fichier
	if ( is_file($doc_path) ){
		// Creation du nouveau nom (avec l'extension)
		if ( $doc_name ){
			$tab = pathinfo($doc_name);
			if ( isset($tab['extension']) ){
				$extension = '.'.$tab['extension'];
				$fichier = $fichier.$extension;
			}
		}
		$fichier_retour = $fichier;
		// On déplace le fichier
		if ( !move_uploaded_file($doc_path, $dir_dest.$fichier) ){
			if ( !rename($doc_path, $dir_dest.$fichier) ){
				return FALSE;
			}
		}
		$fichier = $dir_dest.$fichier;
		// Obtention du type mime
		$type = mime_content_type($fichier);
	}
	else {
		return FALSE;
	}
	// Verification du type de fichiers
	if (strpos($type, 'image/') !== FALSE ){
		// Dans le cas d'un fichier image
		$commande = "convert $convert_options {$fichier} {$fichier}mail.jpg";
		exec($commande);
	} 
	elseif (strpos($type, 'pdf') !== FALSE ){
		// Dans le cas d'un fichier pdf
		if ( FALSE !== ( $file = file_get_contents( $fichier ) ) ) {
			// Obtention du nombre de pages
			$pages = preg_match_all( "/\/Page\W/", $file, $matches );
			for ($i = 0; $i < $pages; $i++) {
				// Convertir chaque page
				$commande = "convert $convert_options {$fichier}[$i] {$fichier}-$i-mail.jpg";
				exec($commande);
			}
		}
		else{
			// fichier pdf illisible
			return FALSE;
		}
	}
	else
		// type de fichier non pris en charge
		return FALSE;
	// renvoie le nouveau nom du fichier
	return $fichier_retour;
}


/*
 * Retourne les fichiers convertis issus du fichier d'origine
 * @param	doc_name	le nom du fichier a chercher
 * @param	dir			le chemin du dossier où chercher
 * @return le tableau des fichiers convertis
 */
function name2files($doc_name, $dir='upload/'){
	return glob($dir.$doc_name.'*');
}


/*
 * Supprime les fichiers correspondant au nom
 * @param	doc_name	le nom du fichier a chercher
 * @param	dir			le chemin du dossier où chercher
 */
function name2suppr($doc_name, $dir='upload/'){
	$files = name2files($doc_name, $dir);
	foreach ($files as $file)
		unlink($file);
}




/*
//$sources = array('upload/jpg.jpg','upload/gif.gif','upload/png.png','upload/pdf.pdf','upload/pdfx.pdf');
$sources = glob('upload/*');
$resultats = array();
foreach ($sources as $source)
	if ( $resultats[] = doc2jpgs($source) )
		echo $source.': '.end($resultats)."\n";
	else
		echo $source.': '."Echec\n";
foreach ($resultats as $resultat){
	var_dump($resultat);
	if ($resultat)
		print_r(name2files($resultat,''));
}
*/
?>
